﻿#define _CRT_SECURE_NO_WARNINGS 1
#include <stdio.h>

//1.像文件中输出文本

//int main()
//{
//	FILE* pf = fopen("myfile.txt", "w");
//	if (pf == NULL)
//	{
//		perror("fopen");
//	}
//	fputs("fopen example", pf);
//	fclose(pf);
//	pf = NULL;
//	return 0;
//}

//2.讲a-z字符挨个写入文件
//int main()
//{
//	FILE* pf = fopen("myfile.txt", "w");
//	if (pf == NULL)
//	{
//		perror("fopen");
//		return 1;
//	}
//
//	for (int i = 'a'; i <= 'z'; i++)
//	{
//		fputc(i, pf);
//	}
//
//	fclose(pf);
//	pf = NULL;
//	return 0;
//}


//3.将刚刚写入的数据读入到字符数组中
//int main()
//{
//	char arr[100] = { 0 };
//	FILE* pf = fopen("myfile.txt", "r");
//	if (pf == NULL)
//	{
//		perror("fopen");
//		return 1;
//	}
//	int ch;
//	while ((ch = fgetc(pf)) != EOF)
//	{
//		printf("%c ", ch);
//	}
//
//	fclose(pf);
//	pf = NULL;
//	return 0;
//}


//4.将字符串写入文件
//int main()
//{
//
//	FILE* pf = fopen("myfile.txt", "w");
//	if (pf == NULL)
//	{
//		perror("fopen");
//		return 1;
//	}
//
//	fputs("hello world", pf);
//
//
//	fclose(pf);
//	pf = NULL;
//	return 0;
//}

//将字符串从文件中读取出来放到一个文件中
//int main()
//{
//	
//	FILE* pf = fopen("myfile.txt", "r");
//	if (pf == NULL)
//	{
//		perror("fopen>");
//		return 1;
//	}
//	char arr[20] = { 0 };
//	while((fgets(arr, 20, pf)) != NULL)
//	    printf("%s", arr);
//
//
//	fclose(pf);
//	pf = NULL;
//	return 0;
//}

//将格式化的数据写入文件
//struct S
//{
//	char name[20];
//	int age;
//	float score;
//};
//int main()
//{
//	struct S s = { "朱钱",20,65.8f };
//	FILE* pf = fopen("myfile.txt", "w");
//	if (pf == NULL)
//	{
//		perror("fopen>");
//		return 1;
//	}
//
//	fprintf(pf, "%s %d %f", s.name, s.age, s.score);
//
//	fclose(pf);
//	pf = NULL;
//
//	return 0;
//}

//
//struct S
//{
//	char name[20];
//	int age;
//	float score;
//};
//int main()
//{
//	struct S s = { 0 };
//	FILE* pf = fopen("myfile.txt", "r");
//	if (pf == NULL)
//	{
//		perror("fopen>");
//		return 1;
//	}
//
//	fscanf(pf, "%s %d %f", s.name, &(s.age), &(s.score));
//	printf("%s %d %f", s.name, s.age, s.score);
//	fclose(pf);
//	pf = NULL;
//
//	return 0;
//}

//fwrite
//int main()
//{
//	FILE* pf = fopen("myfile.txt", "w");
//	if (pf == NULL)
//	{
//		perror("fopen>");
//		return 1;
//	}
//	int arr[20] = {1,2,3,4,5};
//	fwrite(arr, sizeof(int), 5, pf);
//
//	fclose(pf);
//	pf = NULL;
//	return 0;
//}

//fread
//int main()
//{
//	FILE* pf = fopen("myfile.txt", "r");
//	if (pf == NULL)
//	{
//		perror("fopen>");
//		return 1;
//	}
//	int arr[20];
//	/*fread(arr, sizeof(int), 5, pf);*/
//	int i = 0;
//	while (fread(arr+i, sizeof(int), 1, pf))
//	{
//		printf("%d ", arr[0]);
//		i++;
//	}
//	fclose(pf);
//	pf = NULL;
//	return 0;
//}


//sprintf————将格式化的数据转换为字符串
//sscanf————将字符串转换为格式化的数据
//struct S
//{
//	char name[20];
//	int age;
//	float score;
//};
//int main()
//{
//	struct S s = { "张三",20,65.9f };
//	char arr[20];
//	sprintf(arr, "%s %d %f", s.name, s.age, s.score);
//	printf("%s ", arr);
//
//	struct S s1;
//	sscanf(arr, "%s %d %f", s1.name, &(s1.age), &(s1.score));
//	printf("%s %d %f", s1.name, s1.age, s1.score);
//	return 0;
//}



//int main()
//{
//	FILE* pf = fopen("myfile.txt", "r");
//	if (pf == NULL)
//	{
//		perror("fopen>");
//		return 1;
//	}
//
//	int ret = fgetc(pf);
//	printf("%c\n", ret);
//    
//	//此时我需要读到f,就可以使用fseek函数来改变光标的位置
//	fseek(pf, 4, SEEK_CUR);
//	ret = fgetc(pf);
//	printf("%c\n", ret);
//	fclose(pf);
//	pf = NULL;
//	return 0;
//}

//int main()
//{
//	FILE* pFile;
//	long size;
//	pFile = fopen("myfile.txt", "rb");
//	if (pFile == NULL)
//		perror("Error opening file");
//	else
//	{
//		fseek(pFile, 0, SEEK_END); // non-portable
//		size = ftell(pFile);
//		fclose(pFile);
//		printf("Size of myfile.txt: %ld bytes.\n", size);
//	}
//	return 0;
//}


//int main()
//{
//	//打开文件
//	FILE* pf = fopen("myfile.txt", "r");
//	if (pf == NULL)
//	{
//		perror("fopen>");
//		return 1;
//	}
//	//文件操作
//	int ret = fgetc(pf);
//	printf("%c\n", ret);
//
//	//此时我需要读到f，就的使用fseek来改变光标位置
//	fseek(pf, 4, SEEK_CUR);
//	ret = fgetc(pf);
//	printf("%c\n", ret);
//	//此时我想要读到a，该怎么搞呢？
//	fseek(pf,  -3, SEEK_END);
//	ret = fgetc(pf);
//	printf("%c\n", ret);
//	printf("%d\n", ftell(pf));
//	rewind(pf);
//	ret = fgetc(pf);
//	printf("%c\n", ret);
//	//关闭文件
//	fclose(pf);
//	pf = NULL;
//	return 0;
//}


//int main()
//{
//	//打开文件
//	FILE* pf = fopen("myfile.txt", "r");
//	if (pf == NULL)
//	{
//		perror("fopen>");
//		return 1;
//	}
//	//文件操作
//	int ret = 0;
//	while ((ret = fgetc(pf)) != EOF)
//	{
//		printf("%c\n", ret);
//	}
//	if (feof(pf))
//	{
//		printf("遇到文件末尾，读取正常结束！");
//	}
//	else if (ferror(pf))
//	{
//		perror("fgetc>");
//	}
//
//	//关闭文件
//	fclose(pf);
//	pf = NULL;
//	return 0;
//}


//int main()
//{
//	//打开文件
//	FILE* pf = fopen("myfile.txt", "r");
//	if (pf == NULL)
//	{
//		perror("fopen>");
//		return 1;
//	}
//	//文件操作
//
//	for (char i = 'a'; i <= 'z'; i++)
//	{
//		fputc(i, pf);
//	}
//	if (feof(pf))
//	{
//		printf("遇到文件末尾，读取正常结束！");
//	}
//	else if (ferror(pf))
//	{
//		perror("fputc>");
//	}
//
//	//关闭文件
//	fclose(pf);
//	pf = NULL;
//	return 0;
//}

//#include <stdio.h>
//#include <windows.h>
////VS2022 WIN11环境测试
//int main()
//{
//	FILE* pf = fopen("test.txt", "w");
//	fputs("abcdef", pf);//先将代码放在输出缓冲区
//	printf("睡眠10秒-已经写数据了，打开test.txt文件，发现文件没有内容\n");
//	Sleep(10000);
//	printf("刷新缓冲区\n");
//	fflush(pf);//刷新缓冲区时，才将输出缓冲区的数据写到⽂件（磁盘）
//	//注：fflush 在⾼版本的VS上不能使⽤了
//	printf("再睡眠10秒-此时，再次打开test.txt文件，文件有内容了\n");
//	Sleep(10000);
//	fclose(pf);
//	//注：fclose在关闭⽂件的时候，也会刷新缓冲区
//	pf = NULL;
//	return 0;
//}

#include <stdio.h>
//test.c
//声明外部函数
extern int Add(int x, int y);
//声明外部的全局变量
extern int g_val;
int main()
{
	int a = 10;
	int b = 20;
	int sum = add(a, b);
	printf("%d\n", sum);
	return 0;
}